package com.company.common.server.config.mq.models;

import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;


/**
 * 订单
 * */
@Getter
@Setter
public class MQOrderModel {


	/**
	 * 流水号
	 */
	@ApiModelProperty(value = "流水号")
	private String sn;

	/**
	 * 公司编号
	 */
	@ApiModelProperty(value = "公司编号")
	private String companyNo;

	/**
	 * 主公司编号
	 */
	@ApiModelProperty(value = "主公司编号")
	private String mainCompanyNo;

	/**
	 * 用户ID
	 */
	@ApiModelProperty(value = "用户ID")
	private Integer userId;

	/**
	 * 推荐码
	 */
	@ApiModelProperty(value = "推荐码")
	private String referralCode;

	/**
	 * 推荐人用户ID
	 */
	@ApiModelProperty(value = "推荐人用户ID")
	private Integer referralUserId;

	/**
	 * 订单分类
	 */
	@ApiModelProperty(value = "订单分类")
	private String orderType;

	/**
	 * 下单时间
	 */
	@ApiModelProperty(value = "下单时间")
	private LocalDateTime orderDate;

	/**
	 * 过期时间
	 */
	@ApiModelProperty(value = "过期时间")
	private LocalDateTime orderExpire;

	/**
	 * 订单金额（商品金额+税金+支付手续费+运费-）
	 */
	@ApiModelProperty(value = "订单金额（商品金额+税金+支付手续费+运费-）")
	private BigDecimal fund;

	/**
	 * 商品金额
	 */
	@ApiModelProperty(value = "商品金额")
	private BigDecimal productFund;

	/**
	 * 订单参数
	 */
	@ApiModelProperty(value = "订单参数")
	private String orderParam;

	/**
	 * 订单状态
	 */
	@ApiModelProperty(value = "订单状态")
	private String status;

	/**
	 * 是否已兑换积分
	 */
	@ApiModelProperty(value = "是否已兑换积分")
	private String isExchangePoint;

	/**
	 * 兑换积分
	 */
	@ApiModelProperty(value = "兑换积分")
	private Integer exchangePoint;

	/**
	 * 是否已赠送积分
	 */
	@ApiModelProperty(value = "是否已赠送积分")
	private String isRewardPoint;

	/**
	 * 赠送积分
	 */
	@ApiModelProperty(value = "赠送积分")
	private Integer rewardPoint;

	/**
	 * 是否已使用优惠码
	 */
	@ApiModelProperty(value = "是否已使用优惠码")
	private String isUseCouponCode;

	/**
	 * 优惠码
	 */
	@ApiModelProperty(value = "优惠码")
	private String couponCode;

	/**
	 * 优惠码折扣金额
	 */
	@ApiModelProperty(value = "优惠码折扣金额")
	private BigDecimal couponDiscountFund;

	/**
	 * 用户留言
	 */
	@ApiModelProperty(value = "用户留言")
	private String userMemo;

	/**
	 * 用户删除状态
	 */
	@ApiModelProperty(value = "用户删除状态")
	private String userDelState;

	/**
	 * 支付方式
	 */
	@ApiModelProperty(value = "支付方式")
	private String paymentMethod;

	/**
	 * 支付手续费
	 */
	@ApiModelProperty(value = "支付手续费")
	private BigDecimal paymentFee;

	/**
	 * 支付金额
	 */
	@ApiModelProperty(value = "支付金额")
	private BigDecimal paymentFund;

	/**
	 * 支付状态
	 */
	@ApiModelProperty(value = "支付状态")
	private String paymentState;

	/**
	 * 支付时间
	 */
	@ApiModelProperty(value = "支付时间")
	private LocalDateTime payDate;

	/**
	 * 配送方式
	 */
	@ApiModelProperty(value = "配送方式")
	private String shippingMethod;

	/**
	 * 运费
	 */
	@ApiModelProperty(value = "运费")
	private BigDecimal freight;

	/**
	 * 收货人姓名
	 */
	@ApiModelProperty(value = "收货人姓名")
	private String consigneeName;

	/**
	 * 收货人电话
	 */
	@ApiModelProperty(value = "收货人电话")
	private String consigneePhone;

	/**
	 * 收货人省份
	 */
	@ApiModelProperty(value = "收货人省份")
	private String consigneeProvince;

	/**
	 * 收货人城市
	 */
	@ApiModelProperty(value = "收货人城市")
	private String consigneeCity;

	/**
	 * 收货人地区
	 */
	@ApiModelProperty(value = "收货人地区")
	private String consigneeRegion;

	/**
	 * 收货人街道
	 */
	@ApiModelProperty(value = "收货人街道")
	private String consigneeStreet;

	/**
	 * 收货人详细地址
	 */
	@ApiModelProperty(value = "收货人详细地址")
	private String consigneeAddr;

	/**
	 * 是否需要发票
	 */
	@ApiModelProperty(value = "是否需要发票")
	private String isInvoice;

	/**
	 * 发票类型
	 */
	@ApiModelProperty(value = "发票类型")
	private String invoiceType;

	/**
	 * 发票抬头
	 */
	@ApiModelProperty(value = "发票抬头")
	private String invoiceTitle;

	/**
	 * 发票税号
	 */
	@ApiModelProperty(value = "发票税号")
	private String invoiceTaxNo;

	/**
	 * 发票内容
	 */
	@ApiModelProperty(value = "发票内容")
	private String invoiceContent;

	/**
	 * 是否已分配库存
	 */
	@ApiModelProperty(value = "是否已分配库存")
	private String isAllocatedStock;

	/**
	 * 退款金额
	 */
	@ApiModelProperty(value = "退款金额")
	private BigDecimal refundFund;

	/**
	 * 审核时间
	 */
	@ApiModelProperty(value = "审核时间")
	private LocalDateTime checkDate;

	/**
	 * 发货时间
	 */
	@ApiModelProperty(value = "发货时间")
	private LocalDateTime shippingDate;

	/**
	 * 收货时间
	 */
	@ApiModelProperty(value = "收货时间")
	private LocalDateTime receivingDate;

	/**
	 * 完成时间
	 */
	@ApiModelProperty(value = "完成时间")
	private LocalDateTime completeDate;

	/**
	 * 关闭时间
	 */
	@ApiModelProperty(value = "关闭时间")
	private LocalDateTime closeDate;

	/**
	 * 订单处理时间
	 */
	@ApiModelProperty(value = "订单处理时间")
	private LocalDateTime handleDate;

	/**
	 * 订单处理人
	 */
	@ApiModelProperty(value = "订单处理人")
	private Integer handleUserId;

	/**
	 * 订单处理留言
	 */
	@ApiModelProperty(value = "订单处理留言")
	private String handleMemo;

	/**
	 * 使用人姓名
	 */
	@ApiModelProperty(value = "使用人姓名")
	private String useUserName;

	/**
	 * 使用人手机号码
	 */
	@ApiModelProperty(value = "使用人手机号码")
	private String useUserMobile;

	/**
	 * 兑换码
	 */
	@ApiModelProperty(value = "兑换码")
	private String exchangeCode;

	/**
	 * 是否有分销商品
	 */
	@ApiModelProperty(value = "是否有分销商品")
	private String isDisProduct;

	/**
	 * 数据状态
	 */
	@ApiModelProperty(value = "数据状态")
	private String rowsState;

	@ApiModelProperty(value = "订单明细")
	private List<MQOrderItem> items;

	public void addItem(MQOrderItem item) {
		if (this.items == null) {
			this.items = new ArrayList<MQOrderItem>();
		}
		if (item != null) {
			this.items.add(item);
		}
	}

}
